package com.uacp.sgb.negocio.servicios;

import java.util.ArrayList;
import java.util.List;

import com.uacp.sgb.datos.dominio.entidades.Bien;
import com.uacp.sgb.datos.dominio.entidades.Dependencia;
import com.uacp.sgb.datos.dominio.entidades.Equipo;
import com.uacp.sgb.datos.dominio.entidades.Mueble;
import com.uacp.sgb.datos.dominio.entidades.TipoBien;
import com.uacp.sgb.datos.dominio.entidades.Vehiculo;
import com.uacp.sgb.datos.dominio.persistencia.dao.EquipoDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.MuebleDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.TipoBienDao;
import com.uacp.sgb.negocio.util.UtilSBN;

public class ServicioBienes 
{
	private static UtilSBN utilSBN = new UtilSBN();

	public static List<Mueble> getMuebles(Dependencia dependencia) 
	{
		return MuebleDao.getMueblesDependencia(dependencia);
	}

	public static List<Vehiculo> getVehiculos(Dependencia dependencia) 
	{
		return null;
	}

	public static List<Equipo> getEquipos(Dependencia dependencia) 
	{
		return EquipoDao.getEquiposDependencia(dependencia);
	}
	
	public static List<Bien> filtrarPorSBN(List<Bien> bienesDisponibles, String filtro) 
	{
		List<Bien> filtrados = new ArrayList<Bien>();
		
		for(Bien bien: bienesDisponibles)
		{
			if( bien.getCodigoSBN().startsWith(filtro.trim()))
				filtrados.add(bien);
		}
		
		return filtrados;
	}

	public static List<Bien> filtrarPorDescripcion(List<Bien> bienesDisponibles,
			String descripcion) 
	{
		List<Bien> filtrados = new ArrayList<Bien>();
		
		for(Bien bien: bienesDisponibles)
		{
			if( bien.getDescripcion().startsWith(descripcion.trim()))
				filtrados.add(bien);
		}
		
		return filtrados;
	}

	public static void asignarCodigosSBN(List<Equipo> equipos, List<Mueble> muebles)
	{
		List<TipoBien> tiposBienes = TipoBienDao.listar();
		List<Bien> bienesActual = new ArrayList<>();
		List<Bien> losBienes = new ArrayList<>();
		List<Bien> marcados = new ArrayList<>();
		
		for(Equipo equipo: equipos)
			losBienes.add(equipo);
		
		for(Mueble mueble: muebles)
			losBienes.add(mueble);
		
		for(TipoBien tipoBien: tiposBienes)
		{
			bienesActual.clear();
			marcados.clear();
			
			for(int i = 0; i < losBienes.size(); i ++)
			{
				Bien bien = losBienes.get(i);
				
				if(bien.getTipoBien().equals(tipoBien))
				{
					bienesActual.add(bien);
					marcados.add(bien);
				}
			}
			
			if(bienesActual.size() > 0)
			{
				asignarSBN(bienesActual);
				
				for(Bien bien: marcados)
					losBienes.remove(bien);
			}
		}
	}
	  
	private static void asignarSBN(List<Bien> bienes) 
	{
		String ultimoSbn = UtilSBN.getUltimoSBNRegistrado(bienes.get(0).getTipoBien());
		
		for(Bien bien: bienes)
		{
			ultimoSbn = UtilSBN.generarSiguienteSBN(ultimoSbn);
			bien.setCodigoSBN(ultimoSbn);
		}
	}
}
